import logging
import re

import yaml
from commons import hot_loading_funcs

logger = logging.getLogger(__file__)

global_vars = {}
"""公共变量"""


def injecting_vars(content):
    """
    在关键字参数中，输入变量
    兼容：参数中有使用变量/参数中没有使用变量
    """
    logger.info(f"原始字符为：{content}")
    data_str = yaml.safe_dump(content)  # yaml数据转字符串

    var_name_list = re.findall(r'\${(.*)}', data_str)
    for var_name in var_name_list:
        if var_name in global_vars:
            data_str = data_str.replace("${" + f"{var_name}" + "}", str(global_vars[var_name]))

    # 捕获热加载函数，并执行返回函数结果
    res = re.findall(r"""\${(.*?)\((.*?)\)}""", data_str)
    for r in res:
        func_args = []
        func_name = r[0]
        logger.info(f"捕获到热加载函数：{func_name}:({r[1]})")
        if r[1] == "":  # 无参数
            pass
        elif "," not in r[1]:  # 一个参数
            func_args.append(r[1])
        elif "," in r[1]:  # 多个参数
            args_list = r[1].split(",")
            for i in args_list:
                func_args.append(i.strip())

        func = getattr(hot_loading_funcs, func_name)
        func_result = func(*func_args)
        data_str = data_str.replace("${" + f"{func_name}(" + r[1] + ")}", str(func_result))

    new_data = yaml.safe_load(data_str)  # 转回yaml数据
    logger.info(f"新字符为：{new_data}")
    return new_data
